//
//  IMVibrateModels.h
//  DualMediationSDK
//
//  Created by YeJary on 2025/1/27.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * 震动类型枚举
 */
typedef NS_ENUM(NSInteger, IMVibrateType) {
    IMVibrateTypeLight = 0,     // 轻微震动
    IMVibrateTypeMedium = 1,    // 中等震动
    IMVibrateTypeHeavy = 2,     // 强烈震动
    IMVibrateTypeSelection = 3, // 选择震动
    IMVibrateTypeImpact = 4,    // 冲击震动
    IMVibrateTypeNotification = 5, // 通知震动
    IMVibrateTypeSuccess = 6,   // 成功震动
    IMVibrateTypeWarning = 7,   // 警告震动
    IMVibrateTypeError = 8      // 错误震动
};

/**
 * 震动强度枚举
 */
typedef NS_ENUM(NSInteger, IMVibrateIntensity) {
    IMVibrateIntensityLight = 0,   // 轻微
    IMVibrateIntensityMedium = 1,  // 中等
    IMVibrateIntensityHeavy = 2    // 强烈
};

/**
 * 震动模式枚举
 */
typedef NS_ENUM(NSInteger, IMVibrateMode) {
    IMVibrateModeOnce = 0,      // 单次震动
    IMVibrateModeRepeat = 1,    // 重复震动
    IMVibrateModePattern = 2    // 模式震动
};

/**
 * 震动配置类
 */
@interface IMVibrateConfig : NSObject

/**
 * 震动类型
 */
@property (nonatomic, assign) IMVibrateType type;

/**
 * 震动强度
 */
@property (nonatomic, assign) IMVibrateIntensity intensity;

/**
 * 震动模式
 */
@property (nonatomic, assign) IMVibrateMode mode;

/**
 * 震动时长（毫秒）
 */
@property (nonatomic, assign) NSTimeInterval duration;

/**
 * 震动频率数组（毫秒）
 * 格式：@[@1000, @500, @1000] 表示震动1秒，停止0.5秒，再震动1秒
 */
@property (nonatomic, strong, nullable) NSArray<NSNumber *> *pattern;

/**
 * 重复次数
 * -1: 不重复
 * 0: 无限重复
 * >0: 指定重复次数
 */
@property (nonatomic, assign) NSInteger repeatCount;

/**
 * 创建简单震动配置
 * @param duration 震动时长（毫秒）
 * @return 震动配置对象
 */
+ (instancetype)configWithDuration:(NSTimeInterval)duration;

/**
 * 创建模式震动配置
 * @param pattern 震动频率数组
 * @param repeatCount 重复次数
 * @return 震动配置对象
 */
+ (instancetype)configWithPattern:(NSArray<NSNumber *> *)pattern
                      repeatCount:(NSInteger)repeatCount;

/**
 * 创建类型震动配置
 * @param type 震动类型
 * @param intensity 震动强度
 * @return 震动配置对象
 */
+ (instancetype)configWithType:(IMVibrateType)type
                     intensity:(IMVibrateIntensity)intensity;

/**
 * 验证配置是否有效
 * @return YES表示有效，NO表示无效
 */
- (BOOL)isValid;

/**
 * 获取配置描述
 * @return 配置描述字符串
 */
- (NSString *)configDescription;

@end

/**
 * 震动结果类
 */
@interface IMVibrateResult : NSObject

/**
 * 是否成功
 */
@property (nonatomic, assign) BOOL success;

/**
 * 错误信息
 */
@property (nonatomic, strong, nullable) NSString *errorMessage;

/**
 * 错误代码
 */
@property (nonatomic, assign) NSInteger errorCode;

/**
 * 震动ID（用于取消震动）
 */
@property (nonatomic, strong, nullable) NSString *vibrateId;

/**
 * 创建成功结果
 * @param vibrateId 震动ID
 * @return 结果对象
 */
+ (instancetype)successWithVibrateId:(NSString * _Nullable)vibrateId;

/**
 * 创建失败结果
 * @param errorCode 错误代码
 * @param errorMessage 错误信息
 * @return 结果对象
 */
+ (instancetype)failureWithCode:(NSInteger)errorCode
                        message:(NSString *)errorMessage;

@end

NS_ASSUME_NONNULL_END